#ifndef SIMPLE_SUPPORT_TYPE_TRAITS_HAS_TUPLE_INTERFACE_HPP
#define SIMPLE_SUPPORT_TYPE_TRAITS_HAS_TUPLE_INTERFACE_HPP

#include <cstddef> // std::nullptr_t
#include <type_traits> // std::true_type std::false_type std::decay_t
#include <tuple> // std::tuple_size

namespace simple::support
{

	template <typename T, typename = std::nullptr_t>
	struct has_tuple_interface : public std::false_type {};

	template <typename T>
	struct has_tuple_interface<T, decltype
	(
		void(std::tuple_size<std::decay_t<T>>::value),
		nullptr
	) > : public std::true_type {};

	template <typename T>
	constexpr bool has_tuple_interface_v = has_tuple_interface<T>::value;

} // namespace simple::support

#endif /* end of include guard */
